﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SmartMathLibrary
{
    /// <summary>
    /// This class includes a collection of mathematical and physical constants's.
    /// </summary>
    [Serializable]
    public static class Constants
    {
        /// <summary>
        /// Zeta(9) = sum(1/n^9,n=1..infinity).
        /// </summary>
        public const double Zeta9 = 1.002008392826082;

        /// <summary>
        /// Zeta(7) = sum(1/n^7,n=1..infinity).
        /// </summary>
        public const double Zeta7 = 1.008349277381922;

        /// <summary>
        /// Zeta(5) = sum(1/n^5,n=1..infinity).
        /// </summary>
        public const double Zeta5 = 1.036927755143369;

        /// <summary>
        /// Zeta(4) = sum(1/n^4,n=1..infinity).
        /// </summary>
        public const double Zeta4 = 1.082323233711138;

        /// <summary>
        /// This constant that Bill Gosper talks about is the average number 
        ///of decimal digits necessary to have the equivalent continued fraction
        ///representations of a number in base 10.
        /// </summary>
        public const double ContinuedFractions = 1.030640834100712;

        /// <summary>
        /// One of the Hadamard- La Vallee-Poussin constant.
        /// </summary>
        public const double HadamardLaValleePossion = 1.034653881897438;

        /// <summary>
        /// 1/(one-ninth constant)
        /// </summary>
        public const double OneNinthConstant = 0.1076539192264845;

        /// <summary>
        /// That constant is invariant, if we expand the number
        ///digit by digit as if it would be a continued fraction then
        ///the number is the same.
        /// </summary>
        public const double TrottConstant = 0.01084101512231113;

        /// <summary>
        /// The natural logarithm of 3.
        /// </summary>
        public const double Log3 = 1.098612288668109;

        /// <summary>
        /// The Lengyel constant.
        /// </summary>
        public const double LengyelConstant = 1.09868580552518701;

        /// <summary>
        /// This number, the Product[Cos[Pi/n], {n,3,infinity}]
        /// is the limit of an interesting figure in geometry.
        /// </summary>
        public const double ProductConstant = 0.114942044853296;

        /// <summary>
        /// Champernowne constant, the natural integers concatenated.
        /// </summary>
        public const double ChampernowneConstant = 0.1234567891011121314151617181920212223242526272829303132;

        /// <summary>
        /// The Glaisher-Kinkelin constant.
        /// </summary>
        public const double GlaisherKinkelin = 1.2824271291006226368753425688697917277676889273250011920637400217404;

        /// <summary>
        /// The Conway constant.
        /// </summary>
        public const double ConwayConstant = 1.3035772690342963912570991121525518907307025046594048757548613;

        /// <summary>
        /// The Mills constant.
        /// </summary>
        public const double MillsConstant = 1.306377883863080;

        /// <summary>
        /// The hard-hexagons entropy constant
        /// </summary>
        public const double HardHexagonsConstant =
            1.3954859724793027352295006635668880689541037281446611908174721561357608803586;

        /// <summary>
        /// The Backhouse constant.
        /// </summary>
        public const double BackhouseConstant = 1.4560749485826896713995953511165435576531783748471315402707024;

        /// <summary>
        /// The Porter constant.
        /// </summary>
        public const double PorterConstant =
            1.4670780794339754728977984847072299534499033224148877773996858176166067443290;

        /// <summary>
        /// The Niven constant is 1 + Sum(1-1/Zeta(n),n=2..infinity).
        /// </summary>
        public const double NivenConstant =
            1.705211140105367764288551453434508160762027651653469099994284906547313192168122491934244132100871;

        /// <summary>
        /// The Khintchine Harmonic constant.
        /// </summary>
        public const double KhintchineHarmonicConstant = 1.74540566240734686349459630968366106729493661877798;

        /// <summary>
        /// The Grothendieck majorant constant.
        /// </summary>
        public const double GrothendieckMajorantConstant =
            1.782213978191369111774413452972549340791731909773239381024959956;

        /// <summary>
        /// The Komornik-Loreti constant.
        /// </summary>
        public const double KomornikLoretiConstant =
            1.787231650182965933013274890337008385337931402961810997784781470505557491750605686991077446567157288;

        /// <summary>
        /// The Tribonacci constant.
        /// </summary>
        public const double TribonacciConstant =
            1.8392867552141611325518525646532866004241787460975922467787586394042032220819;

        /// <summary>
        /// The Feigenbaum constant.
        /// </summary>
        public const double FeigenbaumConstant = -2.5029078750958928222839028732182157863812713767271499773361920567;

        /// <summary>
        /// The number of rooted trees with n nodes grows like b*n^(-3/2)*c^n*(1+O(1/n)).
        /// </summary>
        public const double SecondTreeGrowthConstant =
            2.9557652856519949747148175241231945883754923046635965953504724789059647331395;

        /// <summary>
        /// The Weierstrass constant.
        /// </summary>
        public const double WeierstrassConstant =
            0.4749493799879206503325046363279829685595493732172029822833310248645579291748838602742756412505;

        /// <summary>
        /// The Lehmer constant.
        /// </summary>
        public const double LehmerConstant =
            0.59263271820163619710407860499570146908427540719716107109956260815824735236416;

        /// <summary>
        /// The Golomb Constant.
        /// </summary>
        public const double GolombConstant = 0.62432998854355087099293638310083724417964262018052;

        /// <summary>
        /// The Cahen constant.
        /// </summary>
        public const double CahenConstant =
            0.6434105462883380261822543077575647632865878602682395059870309203074927764618326108484408955504;

        /// <summary>
        /// The Twin primes constant.
        /// </summary>
        public const double TwinPrimesConstant = 0.660161815846869573927812110014555778432623360;

        /// <summary>
        /// The Rabbit constant.
        /// </summary>
        public const double RabbitConstant = 0.709803442861291314641787399444575597012502205767860516957002644651287;

        /// <summary>
        /// The Traveling Salesman constant.
        /// </summary>
        public const double TravelingSalesmanConstant =
            0.71478270079129427201898487962108409673134559709443031939645700411546117738335;

        /// <summary>
        /// The Landau-Ramanujan constant.
        /// </summary>
        public const double LandauRamanujanConstant =
            0.7642236535892206629906987312500923281167905413934095147216866737496146;

        /// <summary>
        /// The Kolakoski constant.
        /// </summary>
        public const double KolakoskiConstant =
            0.7945071927794792762403624156360456462985771009886069672658867371538147750246;

        /// <summary>
        /// The Euler-Mascheroni constant.
        /// </summary>
        public const double EulerMascheroniConstant =
            0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495;

        /// <summary>
        /// The Boltzman constant.
        /// </summary>
        public const double Boltzman = 1.3807e-16;

        /// <summary>
        /// The elementary charge constant.
        /// </summary>
        public const double Echarge = 4.8032e-10;

        /// <summary>
        /// The electron mass constant. 
        /// </summary>
        public const double ElectronMass = 9.1095e-28;

        /// <summary>
        /// The proton mass constant. 
        /// </summary>
        public const double ProtonMass = 1.6726e-24;

        /// <summary>
        /// The Gravitational constant.
        /// </summary>
        public const double Gravitational = 6.6720e-08;

        /// <summary>
        /// The Planck constant.
        /// </summary>
        public const double Planck = 6.6262e-27;

        /// <summary>
        /// The speed of light in a vacuum.
        /// </summary>
        public const double LIGHTSPEED = 2.9979e10;

        /// <summary>
        /// The Stefan-Boltzman constant.
        /// </summary>
        public const double StefanBoltz = 5.6703e-5;

        /// <summary>
        /// The Avogadro number.
        /// </summary>
        public const double AvogadroNumber = 6.0220e23;

        /// <summary>
        /// The gas constant.
        /// </summary>
        public const double GasConstant = 8.3144e07;

        /// <summary>
        /// Gravitational acceleration at the earths surface.
        /// </summary>
        public const double GravitationalAcceleration = 980.67;

        /// <summary>
        /// The Solar Mass.
        /// </summary>
        public const double SolarMass = 1.99e33;

        /// <summary>
        /// The Solar radius.
        /// </summary>
        public const double Solarradius = 6.96e10;

        /// <summary>
        /// The Solar luminosity.
        /// </summary>
        public const double SolarLuminosity = 3.90e33;

        /// <summary>
        /// Solar Flux.
        /// </summary>
        public const double SolarFlux = 6.41e10;

        /// <summary>
        /// The astronomical unit (radius of the earth's orbit).
        /// </summary>
        public const double AstronomicalUnit = 1.50e13;
    }
}